<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数</title>
</head>
<body>

</body>
<script>
/*
*  概念：是被设计为执行特定任务的代码块
*  说明：
*       函数可以把具有相同或相似逻辑的代码"包裹"起来，通过函数调用执行这些被"包裹"的代码逻辑，这么做的优势是有利于精简代码方便使用
*       比如我们前面使用的alert()、prompt()和console.log() 都是一些js函数，只不过已经封装好了，我们直接使用的
*  普通函数声明语法：
*    function 函数名() {
*       函数体
*    }
*  普通函数调用语法：
*      函数名()
*
*  带参函数声明语法：
*    function 函数名(形参1 , 形参2) {
*
*    }
*  带参函数调用语法
*    function 函数名(实参1 , 实参2)
*  带参函数调用语法（改进写法）
*    给每一个形参一个初始值，如果不给的话默认是undefined
*    这种写法不容易出错，最好这样能保证数据稳定性，减少报错
*    function 函数名(形参1 = 值1 ， 形参2 = 值2) {
*    }
*
*   函数的返回值：
*     有返回值返回给定的值，没有返回值返回undefined
*
*   具名函数和匿名函数：
*      具名函数：
*        声明: function fn(){}
*        调用: fn()
*      匿名函数:
*        声明: function() {}
*        使用方式:
*           (1)函数表达式：将匿名函数赋值给一个变量，并且通过变量名称进行调用
*               语法: let fn = function () {}
*               不同点: 具名函数的调用位置可以是任意的，可以在声明位置之前，但是函数表达式必须先声明后调用
*           (2)立即执行函数
*               语法: (function(形参1 , 形参2){})(实参1 , 实参2);
*               不同点: 具名函数需要先调用后执行，立即执行函数不需要认为调用，可以直接执行
* */

    // 函数声明
    function func() {
        console.log('hi~~~~~~')
    }
    // 函数调用——————一次声明，多次调用
    func()
    function getSum(start, end) {
        let sum = 0
        for (let i = start; i <= end; i++) {
            sum += i
        }
        console.log(sum)
    }

    getSum(1 , 50)
    // 匿名函数————函数表达式
    let fn = function (x , y ) {
        console.log("我是函数表达式:" +  x + y)
    }
    fn(1 , 2)

</script>
</html>